//拦截层

module.exports = app => {
    // 设置跨域访问 CROS
    app.all("*", function (req, res, next) {
        // console.log(req.headers.origin);
        //设置允许跨域的域名，*代表允许任意域名跨域
        res.header("Access-Control-Allow-Origin", req.headers.origin);
        // 字段必需 允许的header类型 预检请求头信息是否合法 如果不合法就阻止
        res.header(
            "Access-Control-Allow-Headers",
            "content-type,token,Authorization"
        );
        // 字段必需 跨域允许的请求方式  注意返回的是所有支持的方法，而不但是浏览器请求的那个方法，这是为了避免多次’预检‘请求
        res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
        // 字段可选 值是一个布尔值，表示是否允许发送cookie 默认情况下，Cookie不包括在Cros请求之中。设为true 即表示服务器明确许可，Cookie跨域包含在请求中，一起发给服务器，这个值也只能为true，如果服务器不要浏览器发送cookie删除该字段即可
        res.header("Access-Control-Allow-Credentials", true);
        next();
    });


    //请求域白名单
    // const whiteList = require(path.resolve(basename, "tokenlist/whiteList.js"));
    // app.use((req, res, next) => {
    //     console.log("req.headers.origin", req.headers.origin);
    //     if (whiteList.indexOf(req.headers.origin) == -1) {
    //         res.send({
    //             code: 304,
    //             status: "406",
    //             msg: "当前页面没有权限访问"
    //         })
    //     } else {
    //         next();
    //     }
    // })

    // console.log("中间件");
    const tokenList = require(path.resolve(basename, "tokenList/tokenList.js"));
    app.use((req, res, next) => {
        // console.log(req.headers);

        //判断当前页面是否需要token验证
        if (tokenList.indexOf(req.url) == -1) {
            // console.log("cookie",req.headers.cookie);
            if (req.headers.cookie) {
                let arr = req.headers.cookie.split(';');
                let itemObj = {};
                arr.forEach(item => {
                    let itemArr = item.trim().split("=");
                    itemObj[itemArr[0]] = itemArr[1];
                });
                // console.log(itemObj);
                let token = itemObj.fskl + "." + itemObj.sswr + "." + itemObj.ttnk;
                // console.log(token);

                // 校验token合法性
                jwt.verify(token, 't-o_ken', function (err, decoded) {
                    // console.log("decoded", decoded);
                    if (!decoded) {
                        console.log("账户异常请重新登录");
                        res.send({
                            code: 200,
                            status: 406,
                            msg: "账户异常请重新登录"
                        })
                    } else {
                        next();
                    }
                });
            } else {
                console.log("没有cookie，middleware验证没过");
                res.send({
                    code: 200,
                    status: 406,
                    msg: "账户异常请重新登录"
                })
            }

        } else {
            next();
        }

    })
}